<?php
namespace controller;
require_once ('src/Model/CommentModel.php');
require_once ('src/View/CommentView.php');
require_once ('src/View/DateView.php');

class CommentController {
    private $loginModel;
    private $dateView;
    public $commentModel;                      //skapar en publik medlemsvariabel som anropas av applicationController så då måste den sättas som public
    public $commentView;                       //skapar en publik medlemsvariabel som anropas av applicationController så då måste den sättas som public


    /**
    * @param object \controller\ApplicationController $loginModel
    */
    public function __construct(\model\LoginModel $loginModel)     {
        $this->loginModel = $loginModel;
        $this->commentModel = new \model\CommentModel();
        $this->commentView = new \view\CommentView($this->commentModel);
        $this->dateView = new \view\DateView();
    }


    /**
    * om användaren vill kommentera en blogpost och har fyllt i en kommentar körs nedanstående kod
    */
    public function commentBlogPost() {
        if ($this->commentView->hasNewCommentInput()) {
            $id=$this->commentView->returnCommentId();
            $commentText = $this->commentView->getNewCommentInput();
            $commentUser=$this->loginModel->userModel->returnValidUsername();
            $commentDate = $this->dateView->getCorrectDate();
            $type = $this->commentModel->applicationModel->m_newType;

            if ($this->validateComment($type, $commentText)) {
                $this->commentModel->addCommentToDatabase($commentUser , $commentText , $commentDate , $id) ;
            }
        }
    }


    /**
    * om användaren vill editera sin kommentar körs nedanstående kod
    */
    public function editComment() {
        if ($this->commentView->hasUpdatedCommentInput()) {

            $id=$this->commentView->returnCommentId();
            $updatedCommentText = $this->commentView->getUpdatedCommentInput();
            $type = $this->commentModel->applicationModel->m_updateType;

            if ($this->validateComment($type, $updatedCommentText)) {
                    $this->commentModel->updateCommentInDatabase($updatedCommentText, $id) ;
            }
        }
    }


    /**
    * @param string $type
    * @param string $text
    * @return bolean
    *
    * här valideras så kommentaren är korrekt enligt modellen
    */
    public function validateComment($type, $text)     {
        $isCommentOk = false;

        if ($this->commentModel->isCommentToShort($text)) {
            $this->commentView->setCommentStatusMessage($type, 1);
        } else if ($this->commentModel->isCommentToLong($text)) {
            $this->commentView->setCommentStatusMessage($type, 2);
        } else if ($this->commentModel->hasCommentInvalidChars($text)) {
            $this->commentView->setCommentStatusMessage($type, 3);
            $text= strip_tags($text);                                   //<-strip_tags() inbyggd metod som plockar bort ex html tagar i användarnamn fältet i formuläret
        } else {
            $isCommentOk = true;
        }

        if ($type==$this->commentModel->applicationModel->m_newType) {
             $this->commentView->setNewCommentInput($text);
        } else if ($type==$this->commentModel->applicationModel->m_updateType) {
            $this->commentView->setUpdatedCommentInput($text);
        }
        return $isCommentOk;
    }


    /**
    * @param string
    * @return array
    *
    * här hämtas kommentaren ut från databasen
    */
    public function getComment($id)     {
        $comment = $this->commentModel->returnSpecificComment($id);
        return $comment;
    }


    /**
    * @param string
    * @return string
    *
    * här hämtas användarnamnet ut på den som skrivit kommentaren
    */
    public function getCommentUser($id)     {
        $comment = $this->commentModel->returnSpecificComment($id);
        return $comment[4];
    }


    /**
    * @param string
    * @return array
    *
    * här hämtas alla kommentarerna ut till en specifik blogpost
    */
    public function getBlogComments($id)     {
        $comments = $this->commentModel->returnSpecificBlogComments($id);
        return $comments;
    }


    /**
    * @return bolean
    *
    * här kollas om det är användaren som skrivit kommentaren eller ej
    */
    public function checkCommentUser()     {
        $commentUser = $this->getCommentUser($this->commentView->returnCommentId());
        if($commentUser == $this->loginModel->userModel->returnValidUsername()) {
           return true;
        } else {
           return false;
        }
    }


    /**
    * @param string
    *
    * ta bort kommentar till blogpost i databas
    */
    public function removeComment($id)     {
        $this->commentModel->removeCommentFromDatabase($id);
    }


}

